package level02;

import java.io.IOException;
import java.net.*;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;

/**
 * 一、项目需求：请用户完成一个 UDP 接收端作为模拟网络聊天室的操作。
 * 1: 创建 UDP 传输下的聊天室发送端 UDPSend 类
 * 2: 创建 UDP 传输下的聊天室接收端 Room 类
 */
public class Room {
    public static void main(String[] args) throws IOException {
        //接收线程
        new Thread(()->{
            try {
                //创建一个套接字，用来接收来自发送端的信息
                DatagramSocket socket = new DatagramSocket(8888);

                //创建一个UDP报文，用来接收发送端发送的报文数据
                byte[] bytes = new byte[1024];
                DatagramPacket packet = new DatagramPacket(bytes,bytes.length);

                //死循环接收来自发送端的响应信息
                while (true){
                    //接收来自发送端的UDP报文信息
                    socket.receive(packet);
                    bytes = packet.getData();
                    int length = packet.getLength();
                    System.out.println("来自发送端的" + packet.getAddress().getHostAddress() + "发送信息为: " + new String(bytes, 0, length) );
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }).start();
        //回复线程
        new Thread(()->{
            try {
                //创建一个套接字,用来回复发送端
                DatagramSocket socket = new DatagramSocket();
                //创建一个UDP报文，用来响应发送端发送的信息
                byte[] bytes = new byte[1024];
                DatagramPacket packet = new DatagramPacket(bytes,bytes.length, InetAddress.getLocalHost(),6666);
                //死循环发送信息给发送端
                Scanner scanner = new Scanner(System.in);
                while (true){
                    String nextLine = scanner.nextLine();
                    //将数据设置到UDP报文中
                    packet.setData(nextLine.getBytes(StandardCharsets.UTF_8));
                    packet.setLength(nextLine.getBytes(StandardCharsets.UTF_8).length);
                    socket.send(packet);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }).start();
    }
}
